package com.abel.bigwater.dataserver.model.qdies

import com.abel.bigwater.dataserver.model.PacketCmdException
import io.netty.buffer.ByteBuf

/**
 * 设定D10时间
上位机发送： 帧头 地址 0x01 0x07 年 月 日 时 分 秒 星期 校验 帧尾
时间格式正确时， D10应答： 帧头 地址 0x01 0x01 0xAA 校验 帧尾
时间格式错误时， D10应答： 帧头 地址 0x01 0x01 0xCC 校验 帧尾
说明： 年月日时分秒星期使用BCD码， 以下同。
 */
open class DtenSetTimeData(_len: Int) : D10BaseData(_len) {
    override var type = FuncType.SetTime

    var good: Boolean = true

    override fun fill(buf: ByteBuf) {
        buf.writeByte(if (good) 0xAA else 0xCC)
    }

    override fun parse(buf: ByteBuf): Boolean {
        if (buf.readableBytes() < 1) {
            throw PacketCmdException("should contain 0xAA(success) or 0xCC(fail)")
        }
        val b1 = buf.readUnsignedByte()
        if (!(b1 == 0xAA.toShort() || b1 == 0xCC.toShort())) {
            throw PacketCmdException("should contain 0xAA(success) or 0xCC(fail)")
        }
        good = b1 == 0xAA.toShort()

        return true
    }

    override fun count(): Int = 1
}
